//+------------------------------------------------------------------+ //| SQ9 (Price).mq4 | //| Copyright © 2006, Matt Trigwell | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Matt Trigwell" #property link "m.trigwell@gmail.com" #property indicator_chart_window extern double StartPrice=0.0002; extern double EndCycle=108000; bool Direction_Up=true; extern color _360Degree_Color=C'50,0,0'; extern color _45Degree_Color=C'22,22,22'; extern color _360Label_Color=Maroon; extern color _45Label_Color=DarkGreen; extern bool LineOnBckgrnd=true; //------------------------------------------ extern bool Interval_H1=true; extern bool Interval_D1=false; extern double Position_text=15; int Period_s; int sh; //------------------------------------------ int init() { return(0); } int deinit() { double AngleIndex=0; string AngleName=""; for(AngleIndex=0;AngleIndex<=EndCycle;AngleIndex=AngleIndex+45) { AngleName = "Angle_" + AngleIndex; ObjectDelete(AngleName + " Label_45F"); ObjectDelete(AngleName + " Line_45F"); } return(0); } int start() { //---------------------------------------- if(Interval_H1==true) { Period_s=PERIOD_H1; sh=3600*Position_text; } if(Interval_D1==true) { Period_s=PERIOD_D1; sh=86400*Position_text; } double t=iTime(Symbol(),Period_s,0)+sh; //---------------------------------------- double AngleIndex=0; string AngleName=""; double FactorIndex=0; double AnglePriceLevel=0; int Index=0; string strLabel=""; for(AngleIndex=0;AngleIndex<=EndCycle;AngleIndex=AngleIndex+45) { AnglePriceLevel = CalculateSquare(FactorIndex,StartPrice); //Trim Zero's if(Index==1) { strLabel = DoubleToStr(AngleIndex,1); } else { strLabel = DoubleToStr(AngleIndex,0); } AngleName = "Angle_" + AngleIndex; if(ObjectFind(AngleName + " Line_45F") != 0) { ObjectCreate(AngleName + " Line_45F", OBJ_HLINE, 0, Time[40], AnglePriceLevel); ObjectSet(AngleName + " Line_45F", OBJPROP_STYLE, STYLE_SOLID); ObjectSet(AngleName + " Line_45F",OBJPROP_BACK, LineOnBckgrnd); if(MathMod(Index,8) == 0) { ObjectSet(AngleName + " Line_45F", OBJPROP_COLOR, _360Degree_Color); } else { ObjectSet(AngleName + " Line_45F", OBJPROP_COLOR, _45Degree_Color); } } else { ObjectMove(AngleName + " Line_45F", 0, Time[40], AnglePriceLevel); } if(ObjectFind(AngleName + " Label_45F") != 0) { ObjectCreate(AngleName + " Label_45F", OBJ_TEXT, 0, t, AnglePriceLevel); if(MathMod(Index,8) == 0) { ObjectSetText(AngleName + " Label_45F", strLabel + "°", 8, "Arial", _360Label_Color); } else { ObjectSetText(AngleName + " Label_45F", strLabel + "°", 8, "Arial", _45Label_Color); } } else { ObjectMove(AngleName + " Label_45F", 0, t, AnglePriceLevel); } FactorIndex = FactorIndex + 0.24968;//0.249653; Index = Index + 1; } return(0); } double CalculateSquare(double Factor, double Price) { double AnglePrice=0; if(Price > 0) { if(StringFind(Symbol(),"JPY",0) == -1) { Price = Price * 10000; } else { Price = Price * 100; } if(Direction_Up==true) { AnglePrice = MathPow(MathSqrt(Price) + Factor,2); } else { AnglePrice = MathPow(MathSqrt(Price) - Factor,2); } if(StringFind(Symbol(),"JPY",0) == -1) { AnglePrice = AnglePrice / 10000; } else { AnglePrice = AnglePrice / 100; } } return(AnglePrice); }